package com.hspedu.object;

/**
 * @Author Stringzhua
 * @Date 2024/3/3 11:09
 * description:finalize方法的使用/用法
 */
public class Finalize_ {
    public static void main(String[] args) {
        Car bmw = new Car("宝马bmw");//bmw
        //这时 car对象就是一个垃圾,垃圾回收器就会回收(销毁)对象,
        // 在回收(销毁)对象前,会调用该对象的Finalize方法
        // 程序员可以在这个方法中写自己的业务逻辑(比如释放资源,数据库连接,或者是打开的文件...)
        bmw = null;
        //不是有一个垃圾就立即回收,java的垃圾回收器有自己的一个GC算法
        //也可以自己调用System.gc()主动调用触发垃圾回收机制,但不一定百分百触发
        System.gc();
        System.out.println("程序退出....");
    }
}

class Car {
    private String name;
    //属性,资源

    //finalize如果不重写,那么就会调用Object类的finalize方法,默认处理
    //如果重写了finalize方法,就可以实现自己的逻辑
    //直接写finalize,回车
    @Override
    protected void finalize() throws Throwable {
//        super.finalize();//默认调用Object的finalize方法
        System.out.println("我们销毁 汽车" + name);
        System.out.println("释放了某些资源...");
    }

    public Car(String name) {
        this.name = name;
    }
}